/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pak;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Marcin Sobejko
 * 
 * Klasa tworzaca polaczenie z baza danych za pomoca klasy CSterownikBazyDanych
 */
public class CManagerBazyDanych                                                 
{
    enum TypZapytania { UPDATE, EXECUTE, ERROR };
    
    protected CSterownikBazyDanych protokol;
    
    protected Statement statement;
    
    private ResultSet buforRezultatu;
    
    private String blad;
    
    CManagerBazyDanych (CSterownikBazyDanych protokol)
    {
        this.protokol = protokol;
        this.protokol.polacz();
        try 
        {
            this.statement = this.protokol.connection.createStatement();
        } catch (SQLException ex) 
        {
            Logger.getLogger(CManagerBazyDanych.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    //--------------------------------------------------------------------------
    protected TypZapytania sprawdzRodzajZapytania (String zapytanie)
    {
        TypZapytania type = TypZapytania.ERROR;
        
        if (!zapytanie.isEmpty())
        {
            if (zapytanie.substring(0, 6).matches("SELECT"))
                type = TypZapytania.EXECUTE;
            else
                type = TypZapytania.UPDATE;
        }
        
        return type;
    }
    //--------------------------------------------------------------------------
    public void wykonajZapytanie (String zapytanie)
    {
        if (this.sprawdzRodzajZapytania(zapytanie) == TypZapytania.ERROR)
        {
            this.blad = "Blad w zapytaniu.";
        }
        
        if (this.sprawdzRodzajZapytania(zapytanie) == TypZapytania.EXECUTE)
        {
            try 
            {
                this.buforRezultatu = this.statement.executeQuery(zapytanie);
            } catch (SQLException ex) 
            {
                Logger.getLogger(CManagerBazyDanych.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
        if (this.sprawdzRodzajZapytania(zapytanie) == TypZapytania.UPDATE)
        {
            try
            {
                this.statement.executeUpdate(zapytanie);
            } catch (SQLException ex)
            {
                Logger.getLogger(CManagerBazyDanych.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    //--------------------------------------------------------------------------
    public ResultSet pobierzRezultatZapytania ()
    {
        return this.buforRezultatu;
    }
    //--------------------------------------------------------------------------
    public void odswiezPolaczenie ()
    {
        this.protokol.zamknijPolaczenie();
        this.protokol.polacz();
        try 
        {
            this.statement = this.protokol.connection.createStatement();
        } catch (SQLException ex) 
        {
            Logger.getLogger(CManagerBazyDanych.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}
